ã€ãã¬ãŒã¿ãã«ããŒã®æé©åæè¡ã§JavaScriptã®ããã©ãŒãã³ã¹ãæå€§éã«åŒãåºããŸããããã¹ããªãŒã åŠçãå¹çãé«ããã¡ã¢ãªäœ¿çšéãåæžããã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ãåäžãããæ¹æ³ãåŠã³ãŸãã
JavaScriptã€ãã¬ãŒã¿ãã«ããŒã®ããã©ãŒãã³ã¹æé©åïŒã¹ããªãŒã åŠçã®åŒ·å
JavaScriptã®ã€ãã¬ãŒã¿ãã«ããŒïŒäŸïŒmap, filter, reduceïŒã¯ãããŒã¿ã³ã¬ã¯ã·ã§ã³ãæäœããããã®åŒ·åãªããŒã«ã§ãããããã¯ç°¡æœã§èªã¿ãããæ§æãæäŸãã颿°åããã°ã©ãã³ã°ã®ååã«ããé©åããŸãããã ããå€§èŠæš¡ãªããŒã¿ã»ãããæ±ãå Žåããããã®ãã«ããŒã宿ã«äœ¿çšãããšãããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ã€ãªããå¯èœæ§ããããŸãããã®èšäºã§ã¯ãã€ãã¬ãŒã¿ãã«ããŒã®ããã©ãŒãã³ã¹ãæé©åããããã®é«åºŠãªãã¯ããã¯ã«ã€ããŠæ¢æ±ããã¹ããªãŒã åŠçãšé
å»¶è©äŸ¡ã«çŠç¹ãåœãŠãŠãããå¹ççã§å¿çæ§ã®é«ãJavaScriptã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã
ã€ãã¬ãŒã¿ãã«ããŒã®ããã©ãŒãã³ã¹ãžã®åœ±é¿ãçè§£ãã
åŸæ¥ã®ã€ãã¬ãŒã¿ãã«ããŒã¯ãå³åº§ã«åäœããŸããããã¯ãã³ã¬ã¯ã·ã§ã³å šäœãããã«åŠçããåæäœã®ããã«ã¡ã¢ãªå ã®äžéé åãäœæããããšãæå³ããŸããæ¬¡ã®äŸãèããŠã¿ãŸãããã
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const evenNumbers = numbers.filter(num => num % 2 === 0);
const squaredEvenNumbers = evenNumbers.map(num => num * num);
const sumOfSquaredEvenNumbers = squaredEvenNumbers.reduce((acc, num) => acc + num, 0);
console.log(sumOfSquaredEvenNumbers); // Output: 100
ãã®äžèŠã·ã³ãã«ãªã³ãŒãã§ã¯ã3ã€ã®äžéé
åãäœæãããŸãã1ã€ã¯filterã«ãã£ãŠã1ã€ã¯mapã«ãã£ãŠããããŠæåŸã«reduceæäœãçµæãèšç®ããŸããå°ããé
åã®å Žåããã®ãªãŒããŒãããã¯ç¡èŠã§ããŸããããããæ°çŸäžã®ãšã³ããªãæã€ããŒã¿ã»ãããåŠçããããšãæ³åããŠã¿ãŠãã ãããé¢é£ããã¡ã¢ãªå²ãåœãŠãšã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã¯ãé倧ãªããã©ãŒãã³ã¹äœäžèŠå ãšãªããŸããããã¯ãã¢ãã€ã«ããã€ã¹ãçµã¿èŸŒã¿ã·ã¹ãã ãªã©ã®ãªãœãŒã¹ãéãããç°å¢ã§ã¯ç¹ã«åœ±é¿ããããŸãã
ã¹ããªãŒã åŠçãšé å»¶è©äŸ¡ã®å°å ¥
ã¹ããªãŒã åŠçã¯ãããå¹ççãªä»£æ¿ææ®µãæäŸããŸããã³ã¬ã¯ã·ã§ã³å šäœãäžåºŠã«åŠçãã代ããã«ãã¹ããªãŒã åŠçã¯ã³ã¬ã¯ã·ã§ã³ãããå°ããªãã£ã³ã¯ãŸãã¯èŠçŽ ã«åå²ãããªã³ããã³ãã§äžåºŠã«1ã€ãã€åŠçããŸããããã¯ãã°ãã°é å»¶è©äŸ¡ãšçµã¿åããããŸããé å»¶è©äŸ¡ã§ã¯ãèšç®çµæãå®éã«å¿ èŠã«ãªããŸã§èšç®ãå»¶æãããŸããæ¬è³ªçã«ãæçµçãªçµæãèŠæ±ããããšãã«ã®ã¿å®è¡ãããæäœã®ãã€ãã©ã€ã³ãæ§ç¯ããŸãã
é å»¶è©äŸ¡ã¯ãäžèŠãªèšç®ãé¿ããããšã§ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸããããšãã°ãåŠçãããé åã®æåã®ããã€ãã®èŠçŽ ã®ã¿ãå¿ èŠãªå Žåãé åå šäœãèšç®ããå¿ èŠã¯ãããŸãããå®éã«äœ¿çšãããèŠçŽ ã®ã¿ãèšç®ããŸãã
JavaScriptã§ã®ã¹ããªãŒã åŠçã®å®è£
JavaScriptã«ã¯ãJavaïŒStream APIã䜿çšïŒãPythonã®ãããªèšèªã«çžåœããçµã¿èŸŒã¿ã®ã¹ããªãŒã åŠçæ©èœã¯ãããŸãããããžã§ãã¬ãŒã¿ãŒãšã«ã¹ã¿ã ã€ãã¬ãŒã¿ã®å®è£ ã䜿çšããŠåæ§ã®æ©èœãå®çŸã§ããŸãã
é å»¶è©äŸ¡ã®ããã®ãžã§ãã¬ãŒã¿ãŒã®äœ¿çš
ãžã§ãã¬ãŒã¿ãŒã¯ãäžæåæ¢ããã³åéã§ãã颿°ãå®çŸ©ã§ããJavaScriptã®åŒ·åãªæ©èœã§ãããããã¯ã€ãã¬ãŒã¿ãè¿ããã€ãã¬ãŒã¿ã䜿çšããŠäžé£ã®å€ãé å»¶çã«å埩åŠçã§ããŸãã
function* evenNumbers(numbers) {
for (const num of numbers) {
if (num % 2 === 0) {
yield num;
}
}
}
function* squareNumbers(numbers) {
for (const num of numbers) {
yield num * num;
}
}
function reduceSum(numbers) {
let sum = 0;
for (const num of numbers) {
sum += num;
}
return sum;
}
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const even = evenNumbers(numbers);
const squared = squareNumbers(even);
const sum = reduceSum(squared);
console.log(sum); // Output: 100
ãã®äŸã§ã¯ãevenNumbersãšsquareNumbersã¯ãžã§ãã¬ãŒã¿ãŒã§ãããããã¯ããã¹ãŠã®å¶æ°ãŸãã¯2乿°ãäžåºŠã«èšç®ããŸããã代ããã«ãåå€ããªã³ããã³ãã§çæããŸããreduceSum颿°ã¯ã2乿°ãå埩åŠçããåèšãèšç®ããŸãããã®ã¢ãããŒãã¯ãäžéé
åã®äœæãåé¿ããã¡ã¢ãªäœ¿çšéãåæžããããã©ãŒãã³ã¹ãåäžãããŸãã
ã«ã¹ã¿ã ã€ãã¬ãŒã¿ã¯ã©ã¹ã®äœæ
ããè€éãªã¹ããªãŒã åŠçã®ã·ããªãªã§ã¯ãã«ã¹ã¿ã ã€ãã¬ãŒã¿ã¯ã©ã¹ãäœæã§ããŸããããã«ãããå埩åŠçããã现ããå¶åŸ¡ã§ããã«ã¹ã¿ã 倿ããã³ãã£ã«ã¿ãªã³ã°ããžãã¯ãå®è£ ã§ããŸãã
class FilterIterator {
constructor(iterator, predicate) {
this.iterator = iterator;
this.predicate = predicate;
}
next() {
let nextValue = this.iterator.next();
while (!nextValue.done && !this.predicate(nextValue.value)) {
nextValue = this.iterator.next();
}
return nextValue;
}
[Symbol.iterator]() {
return this;
}
}
class MapIterator {
constructor(iterator, transform) {
this.iterator = iterator;
this.transform = transform;
}
next() {
const nextValue = this.iterator.next();
if (nextValue.done) {
return nextValue;
}
return { value: this.transform(nextValue.value), done: false };
}
[Symbol.iterator]() {
return this;
}
}
// Example Usage:
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const numberIterator = numbers[Symbol.iterator]();
const evenIterator = new FilterIterator(numberIterator, num => num % 2 === 0);
const squareIterator = new MapIterator(evenIterator, num => num * num);
let sum = 0;
for (const num of squareIterator) {
sum += num;
}
console.log(sum); // Output: 100
ãã®äŸã§ã¯ãFilterIteratorãšMapIteratorã®2ã€ã®ã€ãã¬ãŒã¿ã¯ã©ã¹ãå®çŸ©ããŸãããããã®ã¯ã©ã¹ã¯æ¢åã®ã€ãã¬ãŒã¿ãã©ãããããã£ã«ã¿ãªã³ã°ãšå€æããžãã¯ãé
å»¶çã«é©çšããŸãã[Symbol.iterator]()ã¡ãœããã¯ãããã®ã¯ã©ã¹ãå埩å¯èœã«ããfor...ofã«ãŒãã§äœ¿çšã§ããããã«ããŸãã
ããã©ãŒãã³ã¹ãã³ãããŒã¯ãšèæ ®äºé
ã¹ããªãŒã åŠçã®ããã©ãŒãã³ã¹äžã®å©ç¹ã¯ãããŒã¿ã»ããã®ãµã€ãºã倧ãããªãã«ã€ããŠããæç¢ºã«ãªããŸããã¹ããªãŒã åŠçãæ¬åœã«å¿ èŠãã©ããã倿ããã«ã¯ãçŸå®çãªããŒã¿ã§ã³ãŒãããã³ãããŒã¯ããããšãéèŠã§ãã
ããã©ãŒãã³ã¹ãè©äŸ¡ããéã®éèŠãªèæ ®äºé ãæ¬¡ã«ç€ºããŸãã
- ããŒã¿ã»ããã®ãµã€ãºïŒã¹ããªãŒã åŠçã¯ãå€§èŠæš¡ãªããŒã¿ã»ãããæ±ãå Žåã«å¹æãçºæ®ããŸããå°ããªããŒã¿ã»ããã®å Žåããžã§ãã¬ãŒã¿ãŒãŸãã¯ã€ãã¬ãŒã¿ãäœæãããªãŒããŒããããå©ç¹ãäžåãå¯èœæ§ããããŸãã
- æäœã®è€éãïŒå€æããã³ãã£ã«ã¿ãªã³ã°æäœãè€éã§ããã»ã©ãé å»¶è©äŸ¡ã«ããããã©ãŒãã³ã¹ã®åäžã®å¯èœæ§ãé«ããªããŸãã
- ã¡ã¢ãªå¶çŽïŒã¹ããªãŒã åŠçã¯ã¡ã¢ãªäœ¿çšéãåæžããã®ã«åœ¹ç«ã¡ãããã¯ãªãœãŒã¹ãå¶çŽãããç°å¢ã§ã¯ç¹ã«éèŠã§ãã
- ãã©ãŠã¶/ãšã³ãžã³æé©åïŒJavaScriptãšã³ãžã³ã¯åžžã«æé©åãããŠããŸããææ°ã®ãšã³ãžã³ã¯ãåŸæ¥ã®ã€ãã¬ãŒã¿ãã«ããŒã«å¯ŸããŠç¹å®ã®æé©åãå®è¡ããå ŽåããããŸããåžžã«ãã³ãããŒã¯ãè¡ããã¿ãŒã²ããç°å¢ã§æé©ãªããã©ãŒãã³ã¹ãçºæ®ãããã®ã確èªããŠãã ããã
ãã³ãããŒã¯ã®äŸ
console.timeãšconsole.timeEndã䜿çšããŠã峿çãªã¢ãããŒããšé
å»¶çãªã¢ãããŒãã®äž¡æ¹ã®å®è¡æéãæž¬å®ããæ¬¡ã®ãã³ãããŒã¯ãæ€èšããŠãã ããã
const largeArray = Array.from({ length: 1000000 }, (_, i) => i + 1);
// Eager approach
console.time("Eager");
const eagerEven = largeArray.filter(num => num % 2 === 0);
const eagerSquared = eagerEven.map(num => num * num);
const eagerSum = eagerSquared.reduce((acc, num) => acc + num, 0);
console.timeEnd("Eager");
// Lazy approach (using generators from previous example)
console.time("Lazy");
const lazyEven = evenNumbers(largeArray);
const lazySquared = squareNumbers(lazyEven);
const lazySum = reduceSum(lazySquared);
console.timeEnd("Lazy");
//console.log({eagerSum, lazySum}); // Verify results are the same (uncomment for verification)
ãã®ãã³ãããŒã¯ã®çµæã¯ãããŒããŠã§ã¢ãšJavaScriptãšã³ãžã³ã«ãã£ãŠç°ãªããŸãããéåžžãé å»¶çãªã¢ãããŒãã¯ãå€§èŠæš¡ãªããŒã¿ã»ããã«å¯ŸããŠå€§å¹ ãªããã©ãŒãã³ã¹åäžã瀺ããŸãã
é«åºŠãªæé©åææ³
åºæ¬çãªã¹ããªãŒã åŠçã«å ããŠãããã€ãã®é«åºŠãªæé©åææ³ã䜿çšããŠãããã©ãŒãã³ã¹ãããã«åäžãããããšãã§ããŸãã
æäœã®èå
èåãšã¯ãè€æ°ã®ã€ãã¬ãŒã¿ãã«ããŒæäœã1åã®ãã¹ã«çµåããããšã§ããããšãã°ããã£ã«ã¿ãªã³ã°ããŠãããããã³ã°ãã代ããã«ãåäžã®ã€ãã¬ãŒã¿ã§äž¡æ¹ã®æäœãå®è¡ã§ããŸãã
function* fusedOperation(numbers) {
for (const num of numbers) {
if (num % 2 === 0) {
yield num * num; // Filter and map in one step
}
}
}
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const fused = fusedOperation(numbers);
const sum = reduceSum(fused);
console.log(sum); // Output: 100
ããã«ãããå埩ã®åæ°ãšäœæãããäžéããŒã¿ã®éãåæžãããŸãã
ã·ã§ãŒããµãŒããã
ã·ã§ãŒããµãŒããããšã¯ãç®çã®çµæãèŠã€ãããšããã«å埩ã忢ããããšã§ããããšãã°ã倧ããªé åã§ç¹å®ã®å€ãæ¢ããŠããå Žåããã®å€ãèŠã€ãããšããã«å埩ã忢ã§ããŸãã
function findFirst(numbers, predicate) {
for (const num of numbers) {
if (predicate(num)) {
return num; // Stop iterating when the value is found
}
}
return undefined; // Or null, or a sentinel value
}
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const firstEven = findFirst(numbers, num => num % 2 === 0);
console.log(firstEven); // Output: 2
ããã«ãããç®çã®çµæãéæãããåŸãäžèŠãªå埩ãåé¿ãããŸãã`find`ãªã©ã®æšæºã®ã€ãã¬ãŒã¿ãã«ããŒã¯ãã§ã«ã·ã§ãŒããµãŒããããå®è£ ããŠããããšã«æ³šæããŠãã ããããã ããç¹å®ã®ã·ããªãªã§ã¯ãã«ã¹ã¿ã ã·ã§ãŒããµãŒããããå®è£ ãããšæå©ã«ãªãå¯èœæ§ããããŸãã
䞊ååŠçïŒæ³šæããŠïŒ
ç¹å®ã®ã·ããªãªã§ã¯ãç¹ã«èšç®è² è·ã®é«ãæäœãæ±ãå Žåã䞊ååŠçã«ãã£ãŠããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸããJavaScriptã«ã¯ããã©ãŠã¶ã§ã®çã®äžŠååŠçã«å¯Ÿãããã€ãã£ããµããŒãã¯ãããŸããïŒã¡ã€ã³ã¹ã¬ããã®ã·ã³ã°ã«ã¹ã¬ããã®æ§è³ªã®ããïŒããã ããWebã¯ãŒã«ãŒã䜿çšããŠãã¿ã¹ã¯ãåå¥ã®ã¹ã¬ããã«ãªãããŒãã§ããŸãããã ããã¹ã¬ããéã®ããŒã¿è»¢éã®ãªãŒããŒããããå©ç¹ãäžåãå Žåããããããæ³šæããŠãã ããã䞊ååŠçã¯ãéåžžãç¬ç«ãããã£ã³ã¯ã®ããŒã¿ã§åäœããèšç®è² è·ã®é«ãã¿ã¹ã¯ã«é©ããŠããŸãã
䞊ååŠçã®äŸã¯ããè€éã§ããããã®å ¥éçãªèª¬æã®ç¯å²å€ã§ãããäžè¬çãªèãæ¹ã¯ãå ¥åããŒã¿ããã£ã³ã¯ã«åå²ããåãã£ã³ã¯ãåŠçã®ããã«Webã¯ãŒã«ãŒã«éä¿¡ããçµæãçµåããããšã§ãã
å®éã®ã¢ããªã±ãŒã·ã§ã³ãšäŸ
ã¹ããªãŒã åŠçã¯ãããŸããŸãªå®éã®ã¢ããªã±ãŒã·ã§ã³ã§äŸ¡å€ããããŸãã
- ããŒã¿åæïŒã»ã³ãµãŒããŒã¿ãéèååŒããŸãã¯ãŠãŒã¶ãŒã¢ã¯ãã£ããã£ãã°ã®å€§èŠæš¡ãªããŒã¿ã»ããã®åŠçãäŸãšããŠã¯ããŠã§ããµã€ãã®ãã©ãã£ãã¯ãã¿ãŒã³ã®åæããããã¯ãŒã¯ãã©ãã£ãã¯ã®ç°åžžã®æ€åºããŸãã¯å€§éã®ç§åŠããŒã¿ã®åŠçãªã©ããããŸãã
- ç»åããã³ãããªåŠçïŒç»åããã³ãããªã¹ããªãŒã ãžã®ãã£ã«ã¿ãŒã倿ãããã³ãã®ä»ã®æäœã®é©çšãããšãã°ãã«ã¡ã©ãã£ãŒãããã®ãããªãã¬ãŒã ã®åŠçããŸãã¯å€§èŠæš¡ãªç»åããŒã¿ã»ãããžã®ç»åèªèã¢ã«ãŽãªãºã ã®é©çšãªã©ã§ãã
- ãªã¢ã«ã¿ã€ã ããŒã¿ã¹ããªãŒã ïŒæ ªäŸ¡ãã£ãã«ãŒããœãŒã·ã£ã«ã¡ãã£ã¢ãã£ãŒãããŸãã¯IoTããã€ã¹ãªã©ã®ãœãŒã¹ããã®ãªã¢ã«ã¿ã€ã ããŒã¿ã®åŠçãäŸãšããŠã¯ããªã¢ã«ã¿ã€ã ããã·ã¥ããŒãã®æ§ç¯ããœãŒã·ã£ã«ã¡ãã£ã¢ã®ææ åæããŸãã¯ç£æ¥æ©åšã®ç£èŠãªã©ããããŸãã
- ã²ãŒã éçºïŒå€æ°ã®ã²ãŒã ãªããžã§ã¯ãã®åŠçãŸãã¯è€éãªã²ãŒã ããžãã¯ã®åŠçã
- ããŒã¿èŠèŠåïŒWebã¢ããªã±ãŒã·ã§ã³ã§ã®ã€ã³ã¿ã©ã¯ãã£ããªèŠèŠåã®ããã«å€§èŠæš¡ãªããŒã¿ã»ãããæºåããŸãã
ææ°ã®æ ªäŸ¡ã衚瀺ãããªã¢ã«ã¿ã€ã ããã·ã¥ããŒããæ§ç¯ããŠããã·ããªãªãèããŠã¿ãŸãããããµãŒããŒããæ ªäŸ¡ããŒã¿ã®ã¹ããªãŒã ãåä¿¡ããŠãããç¹å®ã®äŸ¡æ Œãããå€ãæºããæ ªåŒããã£ã«ã¿ãªã³ã°ãããããã®æ ªåŒã®å¹³åäŸ¡æ Œãèšç®ããå¿ èŠããããŸããã¹ããªãŒã åŠçã䜿çšãããšãåæ ªäŸ¡ãå°çãããšãã¹ããªãŒã å šäœãã¡ã¢ãªã«ä¿åããããšãªããåæ ªäŸ¡ãåŠçã§ããŸããããã«ããã倧éã®ãªã¢ã«ã¿ã€ã ããŒã¿ãåŠçã§ããå¿çæ§ãé«ãå¹ççãªããã·ã¥ããŒããæ§ç¯ã§ããŸãã
é©åãªã¢ãããŒãã®éžæ
ã¹ããªãŒã åŠçã䜿çšããã¿ã€ãã³ã°ã決å®ããã«ã¯ãæ éãªæ€èšãå¿ èŠã§ããå€§èŠæš¡ãªããŒã¿ã»ããã«å¯ŸããŠå€§ããªããã©ãŒãã³ã¹äžã®å©ç¹ããããŸãããã³ãŒãã®è€éããå¢ãå¯èœæ§ããããŸãã以äžã«ãæææ±ºå®ã¬ã€ãã瀺ããŸãã
- å°ããªããŒã¿ã»ããïŒå°ããªããŒã¿ã»ããïŒ100æªæºã®èŠçŽ ãæã€é åãªã©ïŒã®å ŽåãåŸæ¥ã®ã€ãã¬ãŒã¿ãã«ããŒã§ååãªããšããããããŸããã¹ããªãŒã åŠçã®ãªãŒããŒããããå©ç¹ãäžåãå¯èœæ§ããããŸãã
- äžèŠæš¡ã®ããŒã¿ã»ããïŒäžèŠæš¡ã®ããŒã¿ã»ããïŒ100ã10,000åã®èŠçŽ ãæã€é åãªã©ïŒã®å Žåãè€éãªå€æãŸãã¯ãã£ã«ã¿ãªã³ã°æäœãå®è¡ããå Žåã¯ãã¹ããªãŒã åŠçãæ€èšããŠãã ãããã©ã¡ãã®ã¢ãããŒããåªããŠãããã倿ããããã«ãäž¡æ¹ã®ã¢ãããŒãããã³ãããŒã¯ããŸãã
- 倧ããªããŒã¿ã»ããïŒå€§ããªããŒã¿ã»ããïŒ10,000ãè¶ ããèŠçŽ ãæã€é åãªã©ïŒã®å Žåãéåžžãã¹ããªãŒã åŠçãæšå¥šãããã¢ãããŒãã§ããã¡ã¢ãªäœ¿çšéãå€§å¹ ã«åæžããããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
- ã¡ã¢ãªå¶çŽïŒãªãœãŒã¹ãå¶çŽãããç°å¢ïŒã¢ãã€ã«ããã€ã¹ãçµã¿èŸŒã¿ã·ã¹ãã ãªã©ïŒã§äœæ¥ããŠããå Žåã¯ãã¹ããªãŒã åŠçãç¹ã«æçã§ãã
- ãªã¢ã«ã¿ã€ã ããŒã¿ïŒãªã¢ã«ã¿ã€ã ããŒã¿ã¹ããªãŒã ãåŠçããå Žåãã¹ããªãŒã åŠçã¯å€ãã®å Žåãå¯äžã®å®è¡å¯èœãªãªãã·ã§ã³ã§ãã
- ã³ãŒãã®å¯èªæ§ïŒã¹ããªãŒã åŠçã¯ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãããã³ãŒããããè€éã«ããå¯èœæ§ããããŸããããã©ãŒãã³ã¹ãšå¯èªæ§ã®ãã©ã³ã¹ãåãããã«åªããŠãã ãããã³ãŒããç°¡çŽ åããããã«ãã¹ããªãŒã åŠçã®ããã®ããé«ã¬ãã«ã®æœè±¡åãæäŸããã©ã€ãã©ãªã䜿çšããããšãæ€èšããŠãã ããã
ã©ã€ãã©ãªãšããŒã«
ããã€ãã®JavaScriptã©ã€ãã©ãªã¯ãã¹ããªãŒã åŠçãç°¡çŽ åããã®ã«åœ¹ç«ã¡ãŸãã
- transducers-jsïŒJavaScriptçšã®æ§æå¯èœã§åå©çšå¯èœãªå€æé¢æ°ãæäŸããã©ã€ãã©ãªãé å»¶è©äŸ¡ããµããŒãããå¹ççãªããŒã¿åŠçãã€ãã©ã€ã³ãæ§ç¯ã§ããŸãã
- Highland.jsïŒããŒã¿ã®éåæã¹ããªãŒã ã管çããããã®ã©ã€ãã©ãªãã¹ããªãŒã ã®ãã£ã«ã¿ãªã³ã°ããããã³ã°ãåæžãããã³å€æã®ããã®è±å¯ãªæäœã»ãããæäŸããŸãã
- RxJSïŒJavaScriptã®Reactive ExtensionsïŒïŒObservableã·ãŒã±ã³ã¹ã䜿çšããŠéåæããã³ã€ãã³ãããŒã¹ã®ããã°ã©ã ãäœæããããã®åŒ·åãªã©ã€ãã©ãªãäž»ã«éåæã€ãã³ãã®åŠççšã«èšèšãããŠããŸãããã¹ããªãŒã åŠçã«ã䜿çšã§ããŸãã
ãããã®ã©ã€ãã©ãªã¯ãã¹ããªãŒã åŠçã®å®è£ ãšä¿å®ã容æã«ããããé«ã¬ãã«ã®æœè±¡åãæäŸããŸãã
çµè«
å€§èŠæš¡ãªããŒã¿ã»ãããŸãã¯ãªã¢ã«ã¿ã€ã ããŒã¿ã¹ããªãŒã ãæ±ãå Žåãã¹ããªãŒã åŠçæè¡ã䜿çšããŠJavaScriptã€ãã¬ãŒã¿ãã«ããŒã®ããã©ãŒãã³ã¹ãæé©åããããšã¯ãå¹ççã§å¿çæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ããåŸæ¥ã®ã€ãã¬ãŒã¿ãã«ããŒã®ããã©ãŒãã³ã¹ãžã®åœ±é¿ãçè§£ãããžã§ãã¬ãŒã¿ãŒãã«ã¹ã¿ã ã€ãã¬ãŒã¿ãããã³èåãã·ã§ãŒããµãŒããããªã©ã®é«åºŠãªæé©åæè¡ã掻çšããããšã§ãJavaScriptã³ãŒãã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸããã³ãŒãããã³ãããŒã¯ããããŒã¿ã»ããã®ãµã€ãºãæäœã®è€éããããã³ç°å¢ã®ã¡ã¢ãªå¶çŽã«åºã¥ããŠé©åãªã¢ãããŒããéžæããããšãå¿ããªãã§ãã ãããã¹ããªãŒã åŠçãæ¡çšããããšã§ãJavaScriptã€ãã¬ãŒã¿ãã«ããŒã®å¯èœæ§ãæå€§éã«åŒãåºããã°ããŒãã«ãªãŒãã£ãšã³ã¹åãã«ãããããã©ãŒãã³ã¹ãé«ãã¹ã±ãŒã©ãã«ãªã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã